package cn.line5.module;

import cn.line5.seam.annotations.AjaxRemote;
import cn.line5.seam.annotations.In;
import cn.line5.seam.annotations.Name;
import cn.line5.seam.annotations.Out;
import cn.line5.seam.annotations.Parameter;
import cn.line5.seam.db.PageResult;

@Name("moduleRemote")
/**
 * <h1>模块管理组件调用类</h1>
 * <br/>
 * 
 * @author Liu,Xiaojun
 */
public class ModuleRemote {

	@Parameter
	// 当前页数
	private String currentPage;

	@Parameter
	// 模块ID数组
	private String[] moduleIds;
	
	@Parameter
	// 功能ID数组
	private String[] functionIds;
	
	@Parameter
	// 功能点ID数组
	private String[] pointIds;

	@Parameter
	@Out
	// 模块ID
	private String moduleId;
	
	@Parameter
	@Out
	// 功能ID
	private String functionId;
	
	@Parameter
	// 功能点ID
	private String pointId;

	@Out
	// 模块树的JS代码
	private String treeJs;

	@Out
	// 模块分页列表
	private PageResult pageResult;

	@Out
	// 模块详细信息
	private ModuleVo module;
	
	@Out
	// 功能详细信息
	private ModuleFunctionVo function;
	
	@Out
	// 功能点详细信息
	private ModuleFunctionPointVo point;

	@In("moduleService")
	private ModuleService moduleService;

	/**
	 * 获取模块树
	 */
	public void moduleTree() {
		treeJs = moduleService.getModuleTreeJs();
	}

	/**
	 * 模块列表
	 */
	public void listModule() {
		pageResult = this.moduleService
				.getModulePageList(moduleId, currentPage);
	}
	
	/**
	 * 模块主页
	 */
	public void moduleMain() {
		module = moduleService.getModule(moduleId);
	}

	/**
	 * 模块信息
	 */
	public void moduleInfo() {
		module = moduleService.getModule(moduleId);
	}

	/**
	 * 添加模块
	 */
	@AjaxRemote
	public Boolean addModule(ModuleVo vo) {
		return moduleService.addModule(vo);
	}
	
	/**
	 * 编辑模块页面
	 */
	public void moduleEdit() {
		module = moduleService.getModule(moduleId);
	}

	/**
	 * 修改模块
	 */
	@AjaxRemote
	public Boolean modifyModule(ModuleVo vo) {
		return moduleService.modifyModule(vo);
	}

	/**
	 * 模块向上排序
	 */
	@AjaxRemote
	public Boolean upModule(String moduleId) {
		return moduleService.upModule(moduleId);
	}

	/**
	 * 模块向下排序
	 */
	@AjaxRemote
	public Boolean downModule(String moduleId) {
		return moduleService.downModule(moduleId);
	}

	/**
	 * 删除模块
	 */
	public void deleteModule() {
		moduleService.deleteModule(moduleIds);
	}
	
	/**
	 * 功能列表
	 */
	public void listFunction() {
		pageResult = this.moduleService
				.getFunctionPageList(moduleId, currentPage);
	}

	/**
	 * 编辑功能页面
	 */
	public void functionEdit() {
		function = moduleService.getFunction(functionId);
	}

	/**
	 * 添加功能
	 */
	@AjaxRemote
	public ModuleFunctionVo addFunction(ModuleFunctionVo vo) {
		return moduleService.addFunction(vo);
	}

	/**
	 * 修改功能
	 */
	@AjaxRemote
	public Boolean modifyFunction(ModuleFunctionVo vo) {
		return moduleService.modifyFunction(vo);
	}

	/**
	 * 功能向上排序
	 */
	@AjaxRemote
	public Boolean upFunction(String functionId) {
		return moduleService.upFunction(functionId);
	}

	/**
	 * 功能向下排序
	 */
	@AjaxRemote
	public Boolean downFunction(String functionId) {
		return moduleService.downFunction(functionId);
	}

	/**
	 * 删除功能
	 */
	public void deleteFunction() {
		moduleService.deleteFunction(functionIds);
	}
	
	/**
	 * 功能点列表
	 */
	public void listPoint() {
		pageResult = this.moduleService
				.getPointPageList(functionId, currentPage);
	}

	/**
	 * 编辑功能点页面
	 */
	public void pointEdit() {
		point = moduleService.getPoint(Integer.parseInt(pointId));
	}

	/**
	 * 添加功能点
	 */
	@AjaxRemote
	public Boolean addPoint(ModuleFunctionPointVo vo) {
		return moduleService.addPoint(vo);
	}

	/**
	 * 修改功能点
	 */
	@AjaxRemote
	public Boolean modifyPoint(ModuleFunctionPointVo vo) {
		return moduleService.modifyPoint(vo);
	}

	/**
	 * 功能点向上排序
	 */
	@AjaxRemote
	public Boolean upPoint(String functionId, Integer pointId) {
		return moduleService.upPoint(functionId, pointId);
	}

	/**
	 * 功能点向下排序
	 */
	@AjaxRemote
	public Boolean downPoint(String functionId, Integer pointId) {
		return moduleService.downPoint(functionId, pointId);
	}

	/**
	 * 删除功能点
	 */
	public void deletePoint() {
		moduleService.deletePoint(pointIds);
	}
}
